package com.eightywork.life.receiver;
import org.json.JSONException;
import org.json.JSONObject;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import cn.jpush.android.api.JPushInterface;

import com.eightywork.life.activity.ContentActivity;
import com.eightywork.life.activity.IndexActivity;
import com.eightywork.life.activity.MsgListActivity;
import com.eightywork.life.activity.PmDetailActivity;
import com.eightywork.life.activity.PmListActivity;
import com.eightywork.life.activity.SpaceActivity;
import com.eightywork.life.service.CacheService;
import com.eightywork.life.service.CpService;
import com.eightywork.life.service.SpaceService;
import com.eightywork.life.util.MyHttpException;


/**
 * 自定义接收器
 * 
 * 如果不定义这个 Receiver，则：
 * 1) 默认用户会打开主界面
 * 2) 接收不到自定义消息
 */
public class MyReceiver extends BroadcastReceiver {
	private static final String TAG = "JPush";
	private static final String NOTIFY_TYPE = "notify";
	private static final String COMMENT_TYPE = "comment";
	private static final String REPLY_TYPE = "reply";
	private static final String FORWARD_TYPE = "forward";
	private static final String PM_TYPE = "pm";
	private static final String FRIEND_TYPE = "friend";
	@Override
	public void onReceive(Context context, Intent intent) {
        Bundle bundle = intent.getExtras(); 
	//	System.out.println("bunle---> "  + printBundle(bundle));
		
        if (JPushInterface.ACTION_REGISTRATION_ID.equals(intent.getAction())) {
            String regId = bundle.getString(JPushInterface.EXTRA_REGISTRATION_ID);
            Log.d(TAG, "[MyReceiver] 接收Registration Id : " + regId);
            //send the Registration Id to your server...
                        
        } else if (JPushInterface.ACTION_MESSAGE_RECEIVED.equals(intent.getAction())) {
        	Log.d(TAG, "[MyReceiver] 接收到推送下来的自定义消息: " + bundle.getString(JPushInterface.EXTRA_MESSAGE));
   //     	processCustomMessage(context, bundle);
        
        } else if (JPushInterface.ACTION_NOTIFICATION_RECEIVED.equals(intent.getAction())) {
            Log.d(TAG, "[MyReceiver] 接收到推送下来的通知");
            int notifactionId = bundle.getInt(JPushInterface.EXTRA_NOTIFICATION_ID);
            Log.d(TAG, "[MyReceiver] 接收到推送下来的通知的ID: " + notifactionId);
            receivingNotification(context, bundle);
        	
        } else if (JPushInterface.ACTION_NOTIFICATION_OPENED.equals(intent.getAction())) {
            Log.d(TAG, "[MyReceiver] 用户点击打开了通知");
            openNotification(context, bundle);
        	
        } else if (JPushInterface.ACTION_RICHPUSH_CALLBACK.equals(intent.getAction())) {
            Log.d(TAG, "[MyReceiver] 用户收到到RICH PUSH CALLBACK: " + bundle.getString(JPushInterface.EXTRA_EXTRA));
            //在这里根据 JPushInterface.EXTRA_EXTRA 的内容处理代码，比如打开新的Activity， 打开一个网页等..
        	
        } else {
        	Log.d(TAG, "[MyReceiver] Unhandled intent - " + intent.getAction());
        }
	}

	// 打印所有的 intent extra 数据
	private static String printBundle(Bundle bundle) {
		StringBuilder sb = new StringBuilder();
		
		for (String key : bundle.keySet()) {
			/*if (key.equals(JPushInterface.EXTRA_NOTIFICATION_ID)) {
				sb.append("\nkey:" + key + ", value:" + bundle.getInt(key));
			} else {*/
				sb.append("\nkey:" + key + ", value:" + bundle.getString(key));
		//	}
		}
		return sb.toString();
	}
	
	private void receivingNotification(Context context, Bundle bundle){
		 String title = bundle.getString(JPushInterface.EXTRA_NOTIFICATION_TITLE);
	     Log.v(TAG, " title : " + title);
	     String message = bundle.getString(JPushInterface.EXTRA_ALERT);
	     Log.v(TAG, "message : " + message);
	     String extras = bundle.getString(JPushInterface.EXTRA_EXTRA);
	     Log.v(TAG, "extras : " + extras);
		
	//	String result = bundle.getString(JPushInterface.EXTRA_ALERT);
		String uid = "";
		String msg = "";
		String pushType = "";
		if (PmDetailActivity.activity.inDetailView) {
			try {
				JSONObject extrasJson = new JSONObject(extras);
				uid = extrasJson.optString("uid");
				msg = extrasJson.optString("sub");
				pushType = extrasJson.optString("type");
			} catch (JSONException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
				return;
			}
			
		//	打开自定义的Activity
			if (pushType.equals(PM_TYPE)) {
				bundle.putString("msg", msg);
				bundle.putString("touid", uid);
				PmDetailActivity.activity.updateDataFromPush(bundle);
	//			count --;
			}
		}
	}
	
	private void openNotification(Context context, Bundle bundle){
		String m_auth = CacheService.getSpace().getmAuth();	
		if (m_auth == null) {
			return ;
		}
		String uid = "";
		String msg = "";
		String pushType = "";
	    String extras = bundle.getString(JPushInterface.EXTRA_EXTRA);
	    String id = "";
		String idtype = "";
		try {
			JSONObject extrasJson = new JSONObject(extras);
			uid = extrasJson.optString("uid");
			msg = extrasJson.optString("sub");
			pushType = extrasJson.optString("type");
			id = extrasJson.optString("id");
			idtype = extrasJson.optString("idtype");
		} catch (JSONException e) {
			// TODO Auto-generated catch block
			Log.w(TAG, "Unexpected: extras is not a valid json", e);
            return;
		}
		if (pushType.equals(PM_TYPE)) {
			
			//	bundle.putString("msg", msg);
			if ( ! PmDetailActivity.inDetailView  || ! PmDetailActivity.activity.isEqualCurrentUid(uid)) {
	    		 Log.v("push", "断点126");
	    		 Intent mIntent = new Intent(context, PmDetailActivity.class);
	            mIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
	            mIntent.putExtra("isFromReceive", true);
	            mIntent.putExtra("touid", uid);
	            context.startActivity(mIntent); 
	    	}
		} else if (pushType.equals(FRIEND_TYPE)) {
			Intent intent = new Intent(context, SpaceActivity.class);
			intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
			intent.putExtra("isFromReceive", true);
			intent.putExtra("uid", uid);
			context.startActivity(intent);	
		}  else if (pushType.equals(COMMENT_TYPE) || pushType.equals(FORWARD_TYPE) 
				|| pushType.equals(REPLY_TYPE)) {
			Intent intent = new Intent(context, ContentActivity.class);
			intent.putExtra("id", id);
			intent.putExtra("idtype", "talkid");
			intent.putExtra("isFromReceive", true);
			intent.putExtra("pushType", pushType);
			intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);	
			context.startActivity(intent);
		}
		else {	
	    	Intent intent = new Intent(context,IndexActivity.class);
	//    	intent.putExtras(bundle);
	    	intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
	    	context.startActivity(intent);
		}
		
	
	}
	

}
